<?php

namespace sffi\WechatRobotPlug\msg_attribute;

use sffi\WechatRobotPlug\base\EventInterface;

trait MsgEvent
{
    protected string $event;

    protected array $eventToClass;
    /**
     * @return array
     */
    public function getEventCall(): array
    {
        if (array_key_exists($this->event, $this->eventToClass)) {
            /**
             * @var $method EventInterface
             */
            $method = $this->eventToClass[$this->event];
            return $method::handle($this);
        }
        throw new \Exception('该事件未定义:'.$this->event);
    }

    /**
     * @return mixed
     */
    public function getEvent()
    {
        return $this->event;
    }

    /**
     * 创建群聊事件
     * @return mixed
     */
    abstract public function isGroupCreate();

    /**群邀请事件
     * @return mixed
     */
    abstract public function isGroupVerify();

    /**
     * 群名称变更事件
     * @return mixed
     */
    abstract public function isGroupNameChange();

    /**
     * 群成员增加事件
     * @return mixed
     */
    abstract public function isGroupAddMember();

    /**
     * 群成员减少事件
     * @return mixed
     */
    abstract public function isGroupDecMember();

    /**
     * 群聊消息事件
     * @return mixed
     */
    abstract public function isGroupMsg();

    /**
     * 好友申请事件
     * @return mixed
     */
    abstract public function isFriendVerify();

    /**
     * 私聊消息事件
     * @return mixed
     */
    abstract public function isFriendMsg();

    /**
     * 好友转账事件
     * @return mixed
     */
    abstract public function isFriendTransfer();

    /**
     * 扫码付款事件
     * @return mixed
     */
    abstract public function isQrcodePay();

    /**
     * 机器人登录事件
     * @return mixed
     */
    abstract public function isLogin();
}